package la.iok.hzsvn.lewin.movie.cloud.service;


import la.iok.hzsvn.lewin.movie.core.model.OrgUnitType;
import la.iok.hzsvn.lewin.movie.core.Token;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.Nullable;

/**
 * 面板数据处理。
 */
public interface DashBoardService {
    /**
     * 查询用户总数。根据用户权限查找用户所在组织及其管理的店铺下所有用户的总数量
     * @param token 操作用户
     * @param orgUnitId 查询指定的组织，查询特定组织时使用
     * @return 用户总数量
     */
    int userTotalCount(@NotNull Token token, @Nullable Long orgUnitId);

    /**
     * 查询设备总数。根据用户权限查找用户所在组织及其管理的店铺下所有设备的总数量
     * @param token 操作用户
     * @param orgUnitId 查询指定的组织，查询特定组织时使用
     * @return 设备总数量
     */
    int deviceTotalCount(@NotNull Token token, @Nullable Long orgUnitId);

    /**
     * 查询组织的数量。根据用户权限查找用户所在组织及其管理的店铺的总数量
     * @param token 操作用户
     * @param orgUnitId 查询指定的组织，查询特定组织时使用
     * @param type 查询类型,值为{@link OrgUnitType#getCode()}
     * @return 统计的数量
     */
    int orgUnitTotalCount(@NotNull Token token, @Nullable Long orgUnitId, @Nullable Integer type);

    /**
     * 查询房间总数。根据用户权限查找用户所在组织及其管理的店铺下所有房间的总数量
     * @param token 操作用户
     * @param orgUnitId 查询指定的组织，查询特定组织时使用
     * @return 设备总数量
     */
    int roomTotalCount(@NotNull Token token, @Nullable Long orgUnitId);
}
